package szoftlab4;

import java.util.ArrayList;

/**
 * Olyan csatlakozó, amelynek értékét a szülő építőelem megváltoztathatja, de
 * közvetlenül nem olvassa ki.
 * @author Peti
 */
@SuppressWarnings("LeakingThisInConstructor")
public class Kimenet extends Csatlakozo
{

    private ArrayList<Bemenet> bemenetek;

    /**
     * A kimenet konstruktora. Létrehozza a kimenethez tartozó bemenetlistát.
     */
    public Kimenet()
    {
        Logger.log(this, HivasTipus.Create, "Kimenet", "Kimenet()");
        bemenetek = new ArrayList<Bemenet>();
        Logger.log(this, HivasTipus.Return, "Kimenet", "Kimenet()");
    }

    /**
     * Visszaadja az adott kimenethez tartozó bemenetek listáját.
     *
     * @return
     * A kimenethez tartozó bemenetek listája.
     */
    public ArrayList<Bemenet> getBemenetek()
    {
        Logger.log(this, HivasTipus.Call, "Kimenet", "ArrayList<Bemenet> getBemenetek()");
        Logger.log(this, HivasTipus.Return, "Kimenet", "ArrayList<Bemenet> getBemenetek()");
        return null;
    }

    /**
     * Csatlakozást fogad egy vezeték adott sorszámú bemenetéről. Felveszi a
     * bemenetet a listájába, majd visszaadja önmagát.
     *
     * @param szulo
     * Ennek a kimenetnek a szülő vezetéke.
     *
     * @param kero
     * A csatlakozást kezdeményező vezeték.
     *
     * @param bemenetIndexe
     * A csatlakozást kezdeményező vezeték megadott bemenetének a sorszáma.
     *
     * @return
     * Ez a kimenet.
     */
    public Kimenet csatlakozik(Vezetek szulo, Vezetek kero, int bemenetIndexe)
    {
        Logger.log(this, HivasTipus.Call, "Kimenet", "Kimenet csatlakozik(Vezetek szulo, Vezetek kero, int bemenetIndexe)");
        Logger.log(this, HivasTipus.Return, "Kimenet", "Kimenet csatlakozik(Vezetek szulo, Vezetek kero, int bemenetIndexe)");
        return null;
    }

    /**
     * Csatlakozást fogad egy vezeték adott sorszámú bemenetéről. Felveszi a
     * bemenetet a listájába, majd visszaadja önmagát.
     *
     * @param szulo
     * Ennek a kimenetnek a szülő építőeleme.
     *
     * @param kero
     * A csatlakozást kezdeményező vezeték.
     *
     * @param bemenetIndexe
     * A csatlakozást kezdeményező vezeték megadott bemenetének a sorszáma.
     *
     * @return
     * Ez a kimenet.
     */
    public Kimenet csatlakozik(NemVezetekEpitoelem szulo, Vezetek kero, int bemenetIndexe)
    {
        Logger.log(this, HivasTipus.Call, "Kimenet", "Kimenet csatlakozik(NemVezetek szulo, Vezetek kero, int bemenetIndexe)");
        Logger.log(this, HivasTipus.Return, "Kimenet", "Kimenet csatlakozik(NemVezetek szulo, Vezetek kero, int bemenetIndexe)");
        return null;
    }

    /**
     * Csatlakozást fogad egy nem vezeték típusú építőelem adott sorszámú
     * bemenetéről. Felveszi a bemenetet a listájába, majd visszaadja önmagát.
     *
     * @param szulo
     * Ennek a kimenetnek a szülő vezetéke.
     *
     * @param kero
     * A csatlakozást kezdeményező építőelem.
     *
     * @param bemenetIndexe
     * A csatlakozást kezdeményező építőelem megadott bemenetének a sorszáma.
     *
     * @return
     * Ez a kimenet.
     */
    public Kimenet csatlakozik(Vezetek szulo, NemVezetekEpitoelem kero, int bemenetIndexe)
    {
        Logger.log(this, HivasTipus.Call, "Kimenet", "Kimenet csatlakozik(Vezetek szulo, NemVezetek kero, int bemenetIndexe)");
        Logger.log(this, HivasTipus.Return, "Kimenet", "Kimenet csatlakozik(Vezetek szulo, NemVezetek kero, int bemenetIndexe)");
        return null;
    }

    /**
     * Elutasítja a csatlakozási kérést egy nem vezeték típusú építőelem adott
     * sorszámú bemenetéről. null értékkel tér vissza.
     *
     * @param szulo
     * Ennek a kimenetnek a szülő építőeleme.
     *
     * @param kero
     * A csatlakozást kezdeményező építőelem.
     *
     * @param bemenetIndexe
     * A csatlakozást kezdeményező építőelem megadott bemenetének a sorszáma.
     *
     * @return
     * null.
     */
    public Kimenet csatlakozik(NemVezetekEpitoelem szulo, NemVezetekEpitoelem kero, int bemenetIndexe)
    {
        Logger.log(this, HivasTipus.Call, "Kimenet", "Kimenet csatlakozik(NemVezetek szulo, NemVezetek kero, int bemenetIndexe)");
        Logger.log(this, HivasTipus.Return, "Kimenet", "Kimenet csatlakozik(NemVezetek szulo, NemVezetek kero, int bemenetIndexe)");
        return null;
    }

    /**
     * A kimenet beállítja a saját értékét, majd beállítja a rá csatlakozó
     * bemenetek értékét ugyanúgy.
     *
     * @param ertek
     * A kimenet új értéke.
     */
    public void setErtek(Boolean ertek)
    {
        Logger.log(this, HivasTipus.Call, "Kimenet", "void setErtek(Boolean ertek)");
        for (Bemenet b : bemenetek)
        {
            b.setErtek(null);
        }

        try
        {
            ((Bemenet) Logger.objektumvalasztas("Melyik sorszámú objektum az erre a kimenetre kapcsolt bemenet?")).setErtek(null);
        } catch (Exception e)
        {
        }
        Logger.log(this, HivasTipus.Return, "Kimenet", "void setErtek(Boolean ertek)");
    }
}
